#include "pwm.h"
#include "isr.h"

PWM pwm[2] =    {{pwmPin1, 0},
                {pwmPin2, 0}};
uint8_t pwmEnable = 0;

/**
 * @brief pwm初始化
 *
 */
void pwmInit(void)
{
    pwmPin &= ~pwm[0].pin; // 置0
    pwmPin &= ~pwm[1].pin; // 置0
    Timer0_Init(); // 定时器0初始化
    Timer1_Init(); // 定时器1初始化
    pwmSet(0, 0);
    pwmSet(1, 0);
	pwmEnable = 1;
}

void pwmStop(uint8_t ch)
{
    switch (ch)
    {
    case 0:
        TR0 = 0;
        break;
    case 1:
        TR1 = 0;
        break;
    default:
        break;
    }
}

void pwmStart(uint8_t ch)
{
    switch (ch)
    {
    case 0:
        TR0 = 1;
        break;
    case 1:
        TR1 = 1;
        break;
    default:
        break;
    }
}

/**
 * @brief pwm占空比设置，百分比
 *
 * @param ch 通道号
 * @param persent 百分比
 */
void pwmSet(uint8_t ch, int16_t persent)
{
    if (persent > 930)
        persent = 930;
    pwm[ch].set.set16 = 65535 - persent * 4; // 4时 是1us
}

/**
 * @brief pwm触发器，放在中断内运行
 *
 * @param ch    通道号
 * @param level 电平值
 */
void pwmLevel(uint8_t ch, uint8_t level)
{
    if (level == 0)
    {
        pwmPin &= ~pwm[ch].pin; // 置0
    }
    else
    {
        pwmPin |= pwm[ch].pin; // 置1
    }
}

/**
 * @brief 放在1ms中断内执行
 *
 */
void pwmTigger(void)
{
    if (pwmEnable)
    {
        pwmLevel(0, 1); // 置1
        TR0 = 1;
        pwmLevel(1, 1); // 置1
        TR1 = 1;
    }
}

